import { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse, Method } from 'axios';

/** 请求配置 */
export interface RequestConfig extends Omit<AxiosRequestConfig, 'url | method | params | data '> {
  /**
   * 是否忽略参数清理，默认 false
   */
  ignoreCleanParams?: boolean;
  /**
   * 隐藏默认loading
   */
  hideLoading?: boolean;
  /**
   * 隐藏错误提示语
   */
  hideToast?: boolean;
  /**
   * 发起请求的时间戳
   */
  requestTime?: number;
}

/**
 * 请求参数
 */
export interface RequestOptions<T> {
  /** 接口地址 */
  url: string;
  /** 请求方式 */
  method: Method;
  /** 请求参数 */
  data?: T;
  /** 请求配置 */
  config?: RequestConfig;
}
export interface Response extends Omit<AxiosResponse, 'config'> {
  config: RequestConfig & {
    headers: AxiosRequestHeaders;
  };
}
export interface Pagination<P> {
  pageNum: number;
  pageSize: number;
  totalNum: number;
  totalPage: number;
  result: Array<P>;
}

export interface PageParams {
  pageNum: number;
  pageSize: number;
}

export enum SORT_ORDER {
  ASC = 0,
  DESC = 1
}
export interface RequestSort {
  field: string;
  order: SORT_ORDER;
}
export const PAGE_SIZE = 12;
